package com.example.function.integration.controller;

import com.example.function.integration.service.ImportAndExportService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import static com.example.function.integration.constant.CommonConstant.*;


/**
 * @Description: 导入导出控制层
 * @ClassName: ImportAndExportController
 * @Author: ext.fengcheng
 * @Create: 2023-08-08 12:09
 */
@RestController
@RequestMapping("/request")
public class ImportAndExportController {

    @Resource
    private ImportAndExportService importAndExportService;

    public static Logger logger = LoggerFactory.getLogger(ImportAndExportController.class);

    /**
     * @Description：导入文件数据
     * @Author：fengcheng
     * @Date：2024/10/9 10:20
     * @Param：file
     * @ParamsType：[org.springframework.web.multipart.MultipartFile]
     * @Return：java.lang.Boolean
     */
    @PostMapping("/importFileData")
    public Boolean importFileData(@RequestPart("file") MultipartFile file) {
        logger.info("exportManySheet.开始导入文件数据");
        if (ObjectUtils.isEmpty(file)) {
            logger.error("导入文件为空，请重新导入文件！");
            return false;
        }
        // 获取文件后缀，并校验是否是【.xls】【.xlsx】【.csv】格式的文件
        String fileName = file.getOriginalFilename();
        String fileSuffix = fileName.substring(fileName.indexOf("."));
        if (!XLS.equals(fileSuffix) && !XLSX.equals(fileSuffix) && !CSV.equals(fileSuffix)) {
            logger.error("导入文件后缀不是【" + XLS + "，" + XLSX + "，" + CSV + "】请重新导入文件！");
            return false;
        }
        try {
            // 开始导入文件数据，处理过程中，发生异常则直接结束
            boolean result = importAndExportService.importFileData(file);
            if (!result) {
                logger.info("导入文件失败！");
                return false;
            }
            logger.info("导入文件成功!");
            return true;
        } catch (Exception e) {
            logger.error("导入文件过程中发生异常，异常信息：{}", e.getMessage(), e);
            throw new RuntimeException(e);
        }
    }

    /**
     * @Description: 导出数据，可以同时导出多个sheet页的数据
     * @ClassName: ImportAndExportController
     * @Create: 2023/8/9 9:47
     * @Author: ext.fengcheng
     * @Params: [request, response]
     * @Returns: java.lang.Boolean
     */
    @GetMapping("/exportManySheet")
    public Boolean exportManySheet(HttpServletRequest request, HttpServletResponse response) {
        logger.info("exportManySheet.导出多 Sheet 页实现，开始执行");
        String fileName = request.getParameter("fileName");
        if (StringUtils.isBlank(fileName)) {
            fileName = "导出数据到本地";
        }
        try {
            // 开始导出文件数据，处理过程中，发生异常则直接结束
            boolean result = importAndExportService.exportFileData(fileName, response);
            if (!result) {
                logger.info("导出文件失败！");
                return false;
            }
            logger.info("导出文件成功!");
            return true;
        } catch (Exception e) {
            logger.error("导入文件过程中发生异常，异常信息：{}", e);
            throw new RuntimeException(e);
        }
    }
}
